/*
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖保佑             永无BUG 
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//                  不见满街漂亮妹，哪个归得程序员？
*/
function AllReady() {
    var mstform = Ext.getCmp('CntM4');//获取容器   
    var dgrid = Ext.getCmp('CntD4');//获取容器   
    var toolbar = Ext.getCmp('toolbar');

    var PhidDept = mstform.queryById('PhidDept');//获取字段
    var PhidPc = mstform.queryById('PhidPc');
    var PhidYsfl = mstform.queryById('PhidYsfl');
    var Iscb = mstform.queryById('Iscb');
    var user_taxrate = mstform.queryById('user_taxrate');

    var user_product_line = mstform.queryById('user_product_line');
    var user_regional_center = mstform.queryById('user_regional_center');
    // 去掉明细里面的合同清单名称的必输
    
    dgrid.setMustInputCol("ItemName",false)
    dgrid.hideColumn('ItemName', true);

    

    // 计量单位
    dgrid.setMustInputCol('Unit_EXName', false);
    dgrid.hideColumn('Unit_EXName', true);
    initNum()
    // 赋值默认值
    function initNum(){
        console.log(`拿到所有行`, dgrid.store.data.items);
        const _arrRow = dgrid.store
        for (let i = 0; i < _arrRow.getCount(); i++) {
            if(_arrRow.getAt(i).get("ItemName") !== '空值'){_arrRow.getAt(i).set("ItemName", "空值")}
            if(_arrRow.getAt(i).get("Unit") !== "8570000000000001"){_arrRow.getAt(i).set("Unit", "8570000000000001")}
            if(_arrRow.getAt(i).set("Unit_EXName") !== "台"){_arrRow.getAt(i).set("Unit_EXName", "台")}
            if(["", NaN, null, undefined].indexOf(_arrRow.getAt(i).get("user_employment_type")) !==-1){
                _arrRow.getAt(i).set("user_employment_type", "02")
            }
        }
        dgrid.getView().refresh()
    }
    PhidPc.addListener('helpselected', function () {
        execServer('getProjInfo', { 'pc': PhidPc.getValue() }, function (res) {
            if (res.count > 0) {
                var obj = JSON.parse(res.data);
                PhidDept.setValue(obj[0].extendObjects.dept)
                user_product_line.setValue(obj[0].extendObjects.cpx)
                user_regional_center.setValue(obj[0].extendObjects.qyzx)
                BatchBindCombox([PhidDept])
                BatchBindCombox([user_product_line])
                BatchBindCombox([user_regional_center])
            }
        });

    });
    dgrid.store.on('add', function(store, records, index, eOpts){
        console.log('增行');
        try{
            initNum()
        }catch(err){
            console.log(`计量单位问题`, err);
        }
        
    })
    // execServer("getPtInfoByPhid", {phid: mstform.queryById("PhidPc").getValue()})
    dgrid.addListener('edit', function (editor, e) {//表体编辑触发
        var record = e.record;
        var data = dgrid.getSelectionModel().getSelection(); //获取当前选中行
        // if(){}
        console.log(`监听行`, data);
        sunAdd(dgrid)
        const date1 = data[0].data.user_start_dt
        const date2 = data[0].data.user_end_dt
        const _date = monthsBetweenDates(date1, date2)
        data[0].set("user_pq_month", _date)
        data[0].set("user_fw_amt", Number(data[0].get("user_fw_amt_month")) * Number(data[0].get("user_pq_month")))
        data[0].set("user_yg_amt", Number(data[0].get("user_yg_amt_month")) * Number(data[0].get("user_pq_month")))
        data[0].set("AmtVatFc", Number(data[0].get("user_fw_amt")) + Number(data[0].get("user_yg_amt")))
        data[0].set("user_amt_month", Number(data[0].get("user_fw_amt_month")) + Number(data[0].get("user_yg_amt_month")))
        data[0].set("user_total_amt", Number(data[0].get("user_fw_amt")) + Number(data[0].get("user_yg_amt")))
    });

    dgrid.getColumn('user_position_name').getEditor().on('beforetriggerclick', function (eOp, ignoreBeforeEvent) {
        dgrid.getColumn('user_position_name').getEditor().setOutFilter({ 'm.phid_pc': mstform.getItem('PhidPc').getValue() })
        var data = dgrid.getSelectionModel().getSelection();
        dgrid.getColumn('user_position_name').getEditor().addListener('helpselected', function (record) {
            console.log(`这个是检测等级`, dgrid.getSelectionModel().getSelection()[0].data);
            dgrid.getSelectionModel().getSelection()[0].data.user_wage_standard = record.data.u_wage_standard;
            dgrid.getSelectionModel().getSelection()[0].data.user_qualification_grade_name = record.data.name;
            dgrid.getSelectionModel().getSelection()[0].data.user_qualification_grade = record.data.u_qualification_grade;
            dgrid.getView().refresh();
        })
    
    })





    if (otype == 'add') {
        user_taxrate.setValue('0.06')
    }


    if (otype == 'add' || otype == 'edit') {
        PhidYsfl.setValue('14')
        Iscb.setValue('1')
        BatchBindCombox([PhidYsfl])

        mstform.getItem('PhidYsfl').setVisible(false);
        mstform.getItem('Iscb').setVisible(false);
        mstform.getItem('ExchRate').setVisible(false);
        mstform.getItem('CurrType').setVisible(false);
        mstform.getItem('CntType').setVisible(false);

    }
    function sunAdd(d) {
        const _data = d.store
        let _sum = 0;
        for (let i = 0; i < _data.getCount(); i++) {
            _sum += Number(_data.getAt(i).get("AmtVatFc"))
        }
        mstform.getItem("CntSumFc").setValue(_sum * Number(mstform.getItem("user_taxrate").getValue()))
        mstform.getItem("CntSumVatFc").setValue(_sum)
    }


    //计算派遣月数
    function monthsBetweenDates(date1, date2) {
        if (!date1 || !date2) return 0;
        // 获取两个日期的时间戳（以毫秒为单位）
        const timestamp1 = date1.getTime();
        const timestamp2 = date2.getTime();

        // 计算两个日期的时间差（以毫秒为单位）
        const timeDiff = timestamp2 - timestamp1;

        // 将时间差转换为月数（假设一个月平均按30天算，一天按24小时算，一小时按60分钟算，一分钟按60秒算，一秒按1000毫秒算）
        const monthsDiff = timeDiff / (30 * 24 * 60 * 60 * 1000);

        // 保留约等于5位小数
        return parseFloat(monthsDiff.toFixed(5));
    }
}

function beforeSaveEdit(res) {
    console.log(`保存的参数`);
    try{
        var dgrid = Ext.getCmp('CntD4');//获取容器  
          // 提示上传附件
    // Ext.Msg.alert('提示', '请上传附件');
    const data = dgrid.store
    let i =0;
    const erroID = []
    while(i<data.getCount()){
       try{
        if(!validateIDCard18(data.getAt(i).get("user_id_card"))){
            erroID.push(i)
        }
       }catch(err){

       }finally{
        i++
       }
    }
    if(erroID.length === 0){
        return true
    }else{
        let str = '第'
        for(let i = 0;i<erroID.length;i++){
            str += `${erroID[i]+1}、`
        }
        str += '行身份证号码格式有误！'
        Ext.Msg.alert('提示', str);
        console.log(str);
        return false
    }
    }catch(err){
        console.log(err);
        return false
    }
}

// 身份证校验
function validateIDCard18(idCard) {
    // 身份证号的正则表达式，必须是18位（17位数字 + 1位校验码）
    const idCardRegex = /^\d{17}(\d|X|x)$/;
    
    // 检查身份证号格式
    if (!idCardRegex.test(idCard)) {
      return false;
    }
    
    // 身份证前17位数字的权重
    const weightFactors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校验码对应的值
    const checkCodeMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    
    // 计算校验和
    let sum = 0;
    for (let i = 0; i < 17; i++) {
      sum += parseInt(idCard[i], 10) * weightFactors[i];
    }
    
    // 计算校验码
    const calculatedCheckCode = checkCodeMap[sum % 11];
    const providedCheckCode = idCard[17].toUpperCase(); // 转大写以支持小写x
    
    // 比较校验码
    return calculatedCheckCode === providedCheckCode;
}
    